Od jakiegoś czasu bawię się JSON, po prostu wypychając go jako tekst i nikomu to nie zaszkodziło (o czym wiem), ale chciałbym zacząć robić wszystko poprawnie. Widziałem wiele rzekomych „standardów” dla typu zawartości JSON: application / json application / x-javascript text / javascript text / x-javascript text / x-json Ale który z nich jest poprawny lub najlepszy? Rozumiem, że istnieją różne problemy z bezpieczeństwem i obsługą przeglądarki. Wiem, że istnieje podobne pytanie, jaki typ MIME, jeśli JSON jest zwracany przez REST API?, Ale chciałbym uzyskać nieco bardziej ukierunkowaną odpowiedź.
2020-12-07 21:17:51
1 2 Kolejny W przypadku tekstu JSON: application / json Typ nośnika MIME dla tekstu JSON to application / json. Domyślne kodowanie to UTF-8. (Źródło: RFC 4627). Dla JSONP (uruchamialny JavaScript) z wywołaniem zwrotnym: application / javascript Oto kilka postów na blogu, które zostały wymienione w odpowiednich komentarzach: Dlaczego nie powinieneś używać text / html dla JSON Internet Explorer czasami ma problemy z aplikacją / json Dość pełna lista typów MIME i do czego ich używać Oficjalna lista typów mime w IANA z odpowiedzi @ gnrfan poniżej | IANA zarejestrowała oficjalny typ MIME dla JSON jako application / json. Zapytany o to, dlaczego nie text / json, Crockford wydaje się, że powiedział, że JSON nie jest tak naprawdę JavaScript ani tekstem, a także IANA częściej rozdaje application / * niż text / *. Więcej zasobów: Typy mediów Prośba o komentarze 46 27 bluesmoon: JSON ma typ | W przypadku JSON: Content-Type: application / json W przypadku JSON-P: Content-Type: application / javascript | Oczywiście prawidłowym typem nośnika MIME dla JSON jest application / json, ale konieczne jest uświadomienie sobie, jakiego typu danych oczekuje się w aplikacji. Na przykład używam Ext GWT, a odpowiedź serwera musi mieć postać text / html, ale zawiera dane JSON. Po stronie klienta, odbiornik formularzy Ext GWT uploadForm.getForm (). addListener (nowy FormListenerAdapter () { @Nadpisanie public void onActionFailed (formularz, int httpStatus, String responseText) { MessageBox.alert ("Błąd"); } @Nadpisanie public void onActionComplete (formularz, int httpStatus, String responseText) { MessageBox.alert ("Sukces"); } }); W przypadku korzystania z typu odpowiedzi application / json, przeglądarka sugeruje mi zapisanie pliku. Fragment kodu źródłowego po stronie serwera przy użyciu Spring MVC zwraca nowe AbstractUrlBasedView () { @SuppressWarnings („niezaznaczone”) @Nadpisanie protected void renderMergedOutputModel (model mapy, żądanie HttpServletRequest, HttpServletResponse) zgłasza wyjątek { response.setContentType ("text / html"); response.getWriter (). write (json); } }; | JSON: Odpowiedź to dane generowane dynamicznie, zgodnie z parametrami zapytania przekazanymi w adresie URL. Przykład: {"Name": "Foo", "Id": 1234, "Rank": 7} Content-Type: application / json JSON-P: JSON z dopełnieniem. Odpowiedź to dane JSON z zawiniętym wywołaniem funkcji. Przykład: functionCall ({"Name": "Foo", "Id": 1234, "Rank": 7}); Content-Type: application / javascript | Jeśli używasz Ubuntu lub Debian i udostępniasz pliki .json za pośrednictwem Apache, możesz chcieć udostępniać pliki z odpowiednim typem zawartości. Robię to głównie dlatego, że chcę używać rozszerzenia JSONView do przeglądarki Firefox Moduł mod_mime Apache pomoże to łatwo zrobić. Jednak w Ubuntu musisz edytować plik /etc/mime.types i dodać linię application / json json Następnie uruchom ponownie Apache: restart usługi sudo apache2 | Jeśli wywołujesz usługi sieci Web ASP.NET po stronie klienta, musisz użyć application / json, aby działało. Uważam, że to samo dotyczy frameworków jQuery i Ext. | Właściwy typ zawartości dla JSON to application / json, chyba że używasz JSONP, znanego również jako JSON z dopełnieniem, który jest w rzeczywistości JavaScript, więc odpowiednim typem zawartości będzie application / javascript. | Nie ma wątpliwości, że application / json jest najlepszym typem MIME dla odpowiedzi JSON. Ale miałem pewne doświadczenie, w którym musiałem używać application / x-javascript z powodu problemów z kompresją. Moje środowisko hostingowe to hosting współdzielony z GoDaddy. Nie pozwalają mi na zmianę konfiguracji serwera. Dodałem następujący kod do mojego pliku web.config w celu skompresowania odpowiedzi.Korzystając z tego, strony .aspx zostały skompresowane za pomocą g-zip, ale odpowiedzi JSON nie. dodałem w sekcjach typów statycznych i dynamicznych. Ale to w ogóle nie kompresuje odpowiedzi JSON. Następnie usunąłem ten nowo dodany typ i dodałem w sekcjach typów statycznych i dynamicznych i zmienił typ odpowiedzi w .ashx (program obsługi asynchronicznej) do application / x-javascript A teraz odkryłem, że moje odpowiedzi JSON zostały skompresowane za pomocą g-zip. Więc osobiście polecam używać application / x-javascript tylko wtedy, gdy chcesz skompresować odpowiedzi JSON we współdzielonym środowisku hostingu. Ponieważ w hostingu współdzielonym nie pozwalają one na zmianę usług IISkonfiguracje. | Tylko w przypadku używania application / json jako typu MIME (stan na listopad 2011 z najnowszymi wersjami przeglądarki Chrome, Firefox z Firebug): Koniec z ostrzeżeniami z Chrome, gdy JSON jest ładowany z serwera. Firebug doda kartę do odpowiedzi pokazującą dane JSON sformatowany. Jeśli typ MIME jest inny, pojawi się po prostu jako „Treść odpowiedzi”. | Nie wszystko działa dla aplikacji typu content / json. Jeśli używasz przesyłania formularza Ext JS do przesłania pliku, pamiętaj, że odpowiedź serwera jest analizowana przez przeglądarkę w celu utworzenia dokumentu dla elementu